import time

import pytest
import allure
from core.base_page import BasePage
from page_objects.login_page import LoginPage
from utils.config_util import ConfigUtil
from utils.file_utils import FileUtil  # 用于读取登录数据

# 读取登录测试数据（复用已有的登录数据）
login_data = FileUtil.read_yaml("data/data.yaml")
# 获取成功登录的用例数据（取第一条）
success_login_case = login_data["success_login_case"][0]

@pytest.fixture(scope="function")  # 每个测试函数（用例）都重新执行fixture
def init_browser():
    base_page = BasePage()
    driver = base_page.driver
    yield driver
    base_page.quit()  # 用例执行完，关闭浏览器

@pytest.fixture(scope="function")
def logged_in_driver(init_browser):
    """已登录的浏览器实例（复用登录状态）"""
    driver = init_browser
    # 执行登录操作
    login_page = LoginPage(driver)
    login_page.open_url(ConfigUtil.get_test_url())  # 打开登录页
    login_page.input_username(success_login_case["username"])\
              .input_password(success_login_case["password"])\
              .click_login()  # 执行登录
    time.sleep(3)
    # 验证登录成功（确保后续用例在登录状态下执行）
    assert success_login_case["expected"] in driver.page_source, "登录失败，无法复用"
    yield driver  # 传递已登录的driver给用例

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    # 已有代码：失败截图逻辑（保持不变）
    outcome = yield
    rep = outcome.get_result()
    if rep.when == "call" and rep.failed:
        driver = item.funcargs.get("init_browser") or item.funcargs.get("logged_in_driver")
        if driver:
            allure.attach(
                driver.get_screenshot_as_png(),
                name="失败截图",
                attachment_type=allure.attachment_type.PNG
            )